/*
* 请实现 copyRandomList 函数，复制一个复杂链表。在复杂链表中，每个节点除了有一个 next 指针指向下一个节点，还有一个 random 指针指向链表中的任意节点或者 null。
https://leetcode.cn/problems/fu-za-lian-biao-de-fu-zhi-lcof/

* */
class CopyRandomList {
    public Node copyRandomList(Node head) {
        if(head==null){
            return null;
        }
        for(Node node=head;node!=null;node=node.next.next){
            Node cur=new Node(node.val);
            cur.next=node.next;
            node.next=cur;
        }
        for(Node node=head;node!=null;node=node.next.next){
            Node cur=node.next;
            cur.random=(node.random!=null?node.random.next:null);
        }
        Node newHead=head.next;
        for(Node node=head;node!=null;node=node.next){
            Node cur=node.next;
            node.next=node.next.next;
            cur.next=(cur.next!=null?cur.next.next:null);
        }
        return newHead;
    }
}